package com.taichuan.selfcheck.utils;

import android.text.format.Time;
import android.util.Log;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;

/**
 * Created by OISNY on 2016/7/11.
 */
public class LightTimeUtils {
    /**
     * 获取当前系统时间
     *
     * @return yyyy/MM/dd HH:mm:ss
     */
    public static String getCurrentTime() {
        Date dt = new Date();// 如果不需要格式,可直接用dt,dt就是当前系统时间
        SimpleDateFormat df = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");// 设置显示格式
        return df.format(dt);
    }

    /**
     * 获取当前系统时间
     *
     * @return yyyy/MM/dd HH:mm:ss
     */
    public static String getCurrentTime(String timeFormat) {
        Date dt = new Date();// 如果不需要格式,可直接用dt,dt就是当前系统时间
        SimpleDateFormat df = new SimpleDateFormat(timeFormat);// 设置显示格式
        return df.format(dt);
    }

    /**
     * 时间转换-字符串时间yyyy-MM-dd HH:mm:ss /yyyy/MM/dd HH:mm:ss 转long
     *
     * @param strTime
     * @return
     */
    public static long strToLong(String strTime) {
        String formatType = "yyyy-MM-dd HH:mm:ss";
        if (strTime.indexOf("/") != -1) {
            formatType = "yyyy/MM/dd HH:mm:ss";
        }
        SimpleDateFormat formatter = new SimpleDateFormat(formatType);
        Date date = null;
        try {
            date = formatter.parse(strTime);
        } catch (ParseException e) {
            e.printStackTrace();
        }
        if (date == null) {
            return 0;
        } else {
            long currentTime = date.getTime(); // date类型转成long类型
            return currentTime;
        }
    }

    /**
     * 判断是否是今天
     *
     * @param strTime 字符串时间yyyy-MM-dd HH:mm:ss /yyyy/MM/dd HH:mm:ss
     * @return
     */
    public static boolean isTheDay(String strTime) {
        String currentTime = null;
        if (strTime.indexOf("-") != -1) {
            currentTime = getCurrentTime("yyyy-MM-dd");
        }
        if (strTime.indexOf("/") != -1) {
            currentTime = getCurrentTime("yyyy/MM/dd");
        }
        return currentTime != null && strTime.startsWith(currentTime);
    }

    /**
     * 当前时间是否在指定时间段内
     *
     * @param startTime 时间段开始时间
     * @param endTime   时间段结束时间
     * @return
     */
    public static boolean isCurTimeInTheTimeFrame(String startTime, String endTime) {
        long start = strToLong(startTime);
        long end = strToLong(endTime);
        long cur = System.currentTimeMillis();

        return (cur >= start && cur <= end);
    }

    /**
     * 判断当前系统时间是否在指定时间的范围内
     *
     * @param beginHour
     *            开始小时，例如22
     * @param beginMin
     *            开始小时的分钟数，例如30
     * @param endHour
     *            结束小时，例如 8
     * @param endMin
     *            结束小时的分钟数，例如0
     * @return true表示在范围内，否则false
     */
    public static boolean isCurrentInTimeScope(int beginHour, int beginMin, int endHour, int endMin) {
        boolean result = false;
        final long aDayInMillis = 1000 * 60 * 60 * 24;
        final long currentTimeMillis = System.currentTimeMillis();
        Log.e("TimeUtils","当前时间毫秒数：  " + currentTimeMillis + "  时间：  " + getFormatTime(currentTimeMillis));

        Time now = new Time();
        now.set(currentTimeMillis);

        Time startTime = new Time();
        startTime.set(currentTimeMillis);
        startTime.hour = beginHour;
        startTime.minute = beginMin;

        Time endTime = new Time();
        endTime.set(currentTimeMillis);
        endTime.hour = endHour;
        endTime.minute = endMin;

        if (!startTime.before(endTime)) {
            // 跨天的特殊情况（比如22:00-8:00）
            startTime.set(startTime.toMillis(true) - aDayInMillis);
            result = !now.before(startTime) && !now.after(endTime); // startTime <= now <= endTime
            Time startTimeInThisDay = new Time();
            startTimeInThisDay.set(startTime.toMillis(true) + aDayInMillis);
            if (!now.before(startTimeInThisDay)) {
                result = true;
            }
        } else {
            // 普通情况(比如 8:00 - 14:00)
            result = !now.before(startTime) && !now.after(endTime); // startTime <= now <= endTime
        }
        return result;
    }

    /**
     * 将时间戳转换为默认标准格式格式
     *
     * @return yyyy/MM/dd HH:mm:ss
     */
    public static String getFormatTime(long timeStamp) {
        Date dt = new Date(timeStamp);// 如果不需要格式,可直接用dt,dt就是当前系统时间
        SimpleDateFormat mStandardFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        return mStandardFormat.format(dt);
    }

}
